home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Network Supervisor's Toolkit
/
Network Supervisor's Toolkit.iso
/
tools
/
lu62
/
comm
/
pattach.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-07-10
|
2KB
|
70 lines
#include <dos.h>
#include <stdio.h>
union REGS inregs, outregs;
struct SREGS segregs;
struct crec {
void far *asc_rcv_exit;
short asc_speed;
unsigned char asc_width ; /* word width */
unsigned char asc_parity; /* port & parity */
unsigned char asc_stops; /* number of stop bits */
} rec;
extern speed;
extern width;
extern parity;
extern n_port;
extern stop_num;
extern void rout(void);
pattach(n,pdata,len)
char far *pdata; /* RQB pointer */
int n; /* 0-open,1-send,2-close */
int len; /* length of data */
{
unsigned short mask;
int i, j;
char far *p;
if ( n == 0) {
rec.asc_rcv_exit = rout;
rec.asc_speed = speed;
rec.asc_width = width; /* word length */
rec.asc_parity = parity ; /* parity yes, even */
mask = n_port;
mask = mask << 4;
rec.asc_parity = rec.asc_parity | mask;
rec.asc_stops = stop_num; /* 1 stop bit */
/* Open COM1 */
p = &rec;
inregs.x.dx = FP_OFF( p );
segregs.ds = FP_SEG( p );
inregs.h.ah = 0x00;
inregs.h.al = 0x50;
int86x( 0x6e, &inregs, &outregs, &segregs);
return;
} /* open */
if ( n == 1){
p = pdata-12;
i = len + 28;
inregs.x.dx = FP_OFF( p );
segregs.ds = FP_SEG( p );
inregs.x.cx = i;
inregs.h.ah = 0x02;
int86x( 0x6e, &inregs, &outregs, &segregs);
return;
} /* send */
if ( n == 2){
inregs.h.ah = 0x01;
inregs.h.al = n_port;
int86x( 0x6e, &inregs, &outregs, &segregs);
} /* close */
}